// pages/user/index.js
import { login, loginByPhone, sendVerificationCode } from '../../api/auth'
import { getUserInfo, updateUserInfo, bindStudentInfo, deactivateUser } from '../../api/user'

Page({

  /**
   * 页面的初始数据
   */
  data: {
    userInfo: null,
    token: '',
    loading: false,
    showPhoneLogin: false, // 是否显示手机号登录弹窗
    phone: '', // 手机号
    code: '', // 验证码
    counting: false, // 是否在倒计时
    countDown: 60 // 倒计时秒数
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.checkLoginStatus();
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.checkLoginStatus();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  },

  // 检查登录状态
  async checkLoginStatus() {
    const userId = wx.getStorageSync('userId');
    if (userId) {
      const userInfo = wx.getStorageSync('userInfo');
      if (userInfo) {
        this.setData({ 
          userInfo,
          token: wx.getStorageSync('token') || ''
        });
      } else {
        await this.fetchUserInfo();
      }
    }
  },

  // 获取用户信息
  async fetchUserInfo() {
    try {
      this.setData({ loading: true });
      const userId = wx.getStorageSync('userId');
      if (!userId) {
        throw new Error('用户未登录');
      }
      
      const res = await getUserInfo(userId);
      if (res && res.data) {
        const userInfo = res.data;
        this.setData({ userInfo });
        wx.setStorageSync('userInfo', userInfo);
      }
    } catch (error) {
      console.error('获取用户信息失败:', error);
      // 如果获取用户信息失败，清除登录状态
      this.clearLoginState();
      wx.showToast({
        title: '获取用户信息失败',
        icon: 'none'
      });
    } finally {
      this.setData({ loading: false });
    }
  },

  // 获取用户信息并登录
  async getUserProfile() {
    try {
      // 获取用户信息
      const { userInfo: wxUserInfo } = await wx.getUserProfile({
        desc: '用于完善会员资料',
        lang: 'zh_CN'
      });

      if (!wxUserInfo) {
        throw new Error('获取用户信息失败');
      }

      // 获取登录凭证
      const { code } = await wx.login();
      
      if (!code) {
        throw new Error('获取登录凭证失败');
      }

      // 调用登录接口
      const loginResult = await login(code, {
        nickname: wxUserInfo.nickName,
        avatarUrl: wxUserInfo.avatarUrl,
        gender: wxUserInfo.gender
      });

      console.log('登录结果:', loginResult);

      // 判断登录是否成功
      if (loginResult.code === 200 && loginResult.data) {
        const { data } = loginResult;
        
        if (!data.id) {
          throw new Error('登录失败，用户ID无效');
        }

        // 保存登录信息
        this.saveLoginState(data);

        wx.showToast({
          title: '登录成功',
          icon: 'success'
        });
      } else {
        throw new Error(loginResult.message || '登录失败，请重试');
      }

    } catch (error) {
      console.error('登录失败:', error);
      wx.showToast({
        title: error.message || '登录失败',
        icon: 'none'
      });
    }
  },

  // 保存登录状态
  saveLoginState(data) {
    // 保存必要的登录信息
    wx.setStorageSync('userId', data.id);
    wx.setStorageSync('userInfo', data);
    
    // 获取token（可能在响应头中）
    const token = wx.getStorageSync('token');
    
    // 更新页面状态
    this.setData({
      userInfo: data,
      token: token || ''
    });
  },

  // 清除登录状态
  clearLoginState() {
    wx.removeStorageSync('token');
    wx.removeStorageSync('userInfo');
    wx.removeStorageSync('userId');
    this.setData({
      token: '',
      userInfo: null
    });
  },

  // 显示手机号登录弹窗
  showPhoneLogin() {
    this.setData({
      showPhoneLogin: true,
      phone: '',
      code: ''
    });
  },

  // 关闭手机号登录弹窗
  onClosePhoneLogin() {
    this.setData({
      showPhoneLogin: false
    });
  },

  // 手机号输入事件
  onPhoneInput(event) {
    this.setData({
      phone: event.detail
    });
  },

  // 验证码输入事件
  onCodeInput(event) {
    this.setData({
      code: event.detail
    });
  },

  // 发送验证码
  async handleSendCode() {
    try {
      const { phone } = this.data;
      if (!phone) {
        throw new Error('请输入手机号');
      }
      if (!/^1[3-9]\d{9}$/.test(phone)) {
        throw new Error('请输入正确的手机号');
      }

      await sendVerificationCode(phone);
      
      // 开始倒计时
      this.setData({
        counting: true,
        countDown: 60
      });
      
      const timer = setInterval(() => {
        if (this.data.countDown <= 1) {
          clearInterval(timer);
          this.setData({
            counting: false,
            countDown: 60
          });
        } else {
          this.setData({
            countDown: this.data.countDown - 1
          });
        }
      }, 1000);

      wx.showToast({
        title: '验证码已发送',
        icon: 'success'
      });
    } catch (error) {
      wx.showToast({
        title: error.message || '发送验证码失败',
        icon: 'none'
      });
    }
  },

  // 手机号登录
  async handlePhoneLogin() {
    try {
      const { phone, code } = this.data;
      if (!phone || !code) {
        throw new Error('请输入手机号和验证码');
      }

      const res = await loginByPhone({
        phone,
        code
      });

      if (res.code === 200 && res.data) {
        const { data } = res;
        
        if (!data.id) {
          throw new Error('登录失败，用户ID无效');
        }

        // 保存登录信息
        this.saveLoginState(data);

        // 关闭弹窗
        this.setData({
          showPhoneLogin: false
        });

        wx.showToast({
          title: '登录成功',
          icon: 'success'
        });
      } else {
        throw new Error(res.message || '登录失败，请重试');
      }
    } catch (error) {
      wx.showToast({
        title: error.message || '登录失败',
        icon: 'none'
      });
    }
  },

  // 跳转到订单列表
  navigateToOrders(e) {
    if (!this.data.token) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return;
    }
    const type = e.currentTarget.dataset.type || '';
    wx.navigateTo({
      url: `/pages/order/list/index?type=${type}`
    });
  },

  // 跳转到收货地址
  navigateToAddress() {
    if (!this.data.token) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return;
    }
    wx.navigateTo({
      url: '/pages/address/list/index'
    });
  },

  // 跳转到我的收藏
  navigateToFavorites() {
    if (!this.data.token) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return;
    }
    wx.navigateTo({
      url: '/pages/user/favorites/index'
    });
  },

  // 跳转到浏览历史
  navigateToHistory() {
    if (!this.data.token) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return;
    }
    wx.navigateTo({
      url: '/pages/user/history/index'
    });
  },

  // 跳转到意见反馈
  navigateToFeedback() {
    if (!this.data.token) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return;
    }
    wx.navigateTo({
      url: '/pages/user/feedback/index'
    });
  },

  // 编辑用户信息
  editUserInfo() {
    const token = wx.getStorageSync('token');
    if (!token) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return;
    }
    wx.navigateTo({
      url: '/pages/user/profile/index'
    });
  },

  // 退出登录
  handleLogout() {
    wx.showModal({
      title: '提示',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          this.clearLoginState();
          wx.showToast({
            title: '已退出登录',
            icon: 'success'
          });
        }
      }
    });
  },

  // 注销账号
  async handleDeactivate() {
    try {
      await wx.showModal({
        title: '警告',
        content: '注销账号后，所有数据将被清除且无法恢复，确定要注销吗？',
        confirmText: '确定注销',
        confirmColor: '#ff4444'
      });
      
      const userId = wx.getStorageSync('userId');
      await deactivateUser(userId);
      
      wx.removeStorageSync('token');
      wx.removeStorageSync('userInfo');
      wx.removeStorageSync('userId');
      
      this.setData({
        token: '',
        userInfo: null
      });
      
      wx.showToast({
        title: '账号已注销',
        icon: 'success'
      });
    } catch (error) {
      if (error.errMsg !== 'showModal:cancel') {
        wx.showToast({
          title: error.message || '注销失败',
          icon: 'none'
        });
      }
    }
  }
})